package com.util;

import java.util.Arrays;
import java.util.Optional;

public class EnumUtil {

	/**通过值获取enum对象
     * @param enums
	 * @param value byte类型
     * @return
     */
	private static <T> T reEnumByByteValue(T[] enums, byte value) {
		Optional<T> op = Arrays.stream(enums).filter(t -> ((DbEnum)t).code() == value).findFirst();
		if(op.isPresent()){
			return op.get();
		}
		return null;
	}

	/**通过值获取enum对象
	 * @param enums
	 * @param value String类型
	 * @return
	 */
	private static <T> T reEnumByStringValue(T[] enums, String value) {
		Optional<T> op = Arrays.stream(enums).filter(t -> ((DbStringEnum)t).code().equals(value)).findFirst();
		if(op.isPresent()){
			return op.get();
		}
		return null;
	}

	public static <T> T reEnumByValue(T[] enums, String value) {
		//以第一个值为依据判断enum的数据类型
		if(enums[0] instanceof DbEnum){
			return reEnumByByteValue(enums, Byte.parseByte(value));
		}
		if(enums[0] instanceof DbStringEnum){
			return reEnumByStringValue(enums, value);
		}
		return null;
	}

}
